#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//dup2系统调用
int main()
{
  int fd = open("log.txt",O_WRONLY);
  dup2(fd,1);//将fd更改为1 
  printf("Hello Linux!!!!!!!!!!\n");
  printf("Hello Linux!!!!!!!!!!\n");
  printf("Hello Linux!!!!!!!!!!\n");
  fflush(stdout);
  close(1);
  return 0;
}

//追加重定向
// int main()
// {
//   close(1);
//   int fd = open("log.txt",O_WRONLY | O_CREAT , 0666);
//   if(fd < 0){
//     perror ("open fail");
//     return -1;
//   }

//   printf("Hello Linux!\n");
//   printf("Hello Linux!\n");
//   printf("Hello Linux!\n");
//   fflush(stdout);
//   close(fd);
//   return 0;
// }
//输入重定向
// int main()
// {
//   close(0);
//   int fd = open("log.txt",O_RDONLY);
//   char str[80];
//   while(scanf("%s",str) != EOF)
//   {
//     printf("%s\n",str);
//   }
//   close(fd);
//   return 0;
// }



//输出重定向
// int main()
// {
//   close(1);
//   int fd = open("log.txt",O_WRONLY | O_CREAT,0666);
//   if(fd < 0 ){
//     perror("open fail");
//     return -1;
//   }

//   printf("Hello World!\n");
//   printf("Hello World!\n");
//   fflush(stdout);
//   close(fd);
//   return 0;
// }












//文件描述符分配规则
//在数组当中，找到当前没有被使用的 最小的一个下标，作为新的文件描述符。
// int main()
// {
//   umask(0);
//   close(0);
//   int fd1 = open("log1.txt",O_CREAT | O_RDONLY,0666);
//   int fd2 = open("log2.txt",O_CREAT | O_RDONLY,0666);
//   int fd3 = open("log3.txt",O_CREAT | O_RDONLY,0666);

//   printf("fd1 = %d\n",fd1);
//   printf("fd2 = %d\n",fd2);
//   printf("fd3 = %d\n",fd3);

//   return 0;
// }











// int main()
// {
//     FILE *fp = fopen("myfile", "w");
//     if(!fp)
//     {
//         printf("fopen error!\n");
//     }
//     const char *msg = "hello World!\n";
//     int count = 5;
//     while(count--)
//     {
//         fputs(msg,fp);
//     }
//     fclose(fp);
//     return 0;
// }

    // #include <stdio.h>
    // #include <string.h>
    // int main()
    // {
    //     FILE *fp = fopen("myfile", "r");
    //     if(!fp)
    //     {
    //         printf("fopen error!\n");
    //     }
    //     char buffer[64];
    //     for (int i = 0; i < 5; i++){
    //         //将读取的文件存放到数组中
    //         fgets(buffer, sizeof(buffer), fp);
    //         printf("%s",buffer);
    //     }
    //     fclose(fp);
    //     return 0;
    // }

// int main()
// {
//     fputs("Hello World!\n",stdout);
//     return 0;
// }
// int main()
// {
//     //创建出来文件的权限值不受umask的影响
//     umask(0);
//     int fd1 = open("log1.txt",O_RDONLY | O_CREAT,0666);//0666对应-rw-rw-rw
//     int fd2 = open("log2.txt",O_RDONLY | O_CREAT,0666);
//     int fd3 = open("log3.txt",O_RDONLY | O_CREAT,0666);
//     int fd4 = open("log.4txt",O_RDONLY | O_CREAT,0666);
//     //打开一个不存在的文件
//     int fd5 = open("xxx",O_RDONLY);

//     printf("fd1 = %d\n",fd1);
//     printf("fd2 = %d\n",fd2);
//     printf("fd3 = %d\n",fd3);
//     printf("fd4 = %d\n",fd4);
//     printf("fd5 = %d\n",fd5);
//     return 0;
// }

//
//int main()
//{
//    // int fd = open("log.txt",O_RDONLY);
//    // char buf[1024];
//    // ssize_t nums =read(fd,buf,sizeof(buf));
//    // printf("%d\n",nums);
//    // printf("%s",buf);
//    // return 0;
//
//    int fd = open("log.txt", O_WRONLY | O_APPEND);
//    if(fd < 0 ){
//        perror("open");
//    }
//
//    const char* str =  "Hello Wolrd!\n";
//    ssize_t nums = write(fd,str,strlen(str));
//    printf("%d",nums);
//    close(fd);
//    return 0;
//}
